/*
attachInterrupt()中断开启函数，
第一个参数是开启的中断号，不同引脚、不同开发板对应的中断号不同，这一点需要注意
第二个参数是对应中断的服务函数，需要自己定义，必须是无参数无返回值类型
第三个是中断的触发方式，一个四种：LOW，低电平触发；CHANGE，电平变化触发；FALLING，下降沿触发；RISING，上升沿触发；
此外，还有一种触发方式，HIGH，只有 Due, Zero and MKR1000这些板子支持。

注：不同开发板引脚与中断号对应如下：
 中断号：     0       1     2     3     4     5
  UNO       引脚2    3      
  Mega2560  引脚2    3     21    20    19     18
  Leonardo  引脚3    2     0      1
  Due       ------------所有IO口----------------

digitalPinToInterrupt(pin)：获取对应引脚中断号的函数，返回值为中断编号

detachInterrupt(pin);关闭引脚对应的中断，一般不常用

*/
int i = 0;
void setup() {
  // put your setup code here, to run once:
  pinMode(LED_BUILTIN,OUTPUT);       //设置LED输出模式
  pinMode(2,OUTPUT);                // 定义引脚2，作为输入，将引脚2和引脚3通过杜邦线相连，通过对引脚2写入数据触发引脚3的中断
  digitalWrite(2,LOW);              //设置引脚2初始电平为低电平
  digitalWrite(LED_BUILTIN,LOW);    //熄灭LED
  attachInterrupt(digitalPinToInterrupt(3),function,CHANGE);  //开启引脚3对应的中断
 
}

void loop() {
  // put your main code here, to run repeatedly:
  i++;  
  digitalWrite(2,i%2);  //通过i的值，改变引脚2，进而改变引脚3的电平，使其产生中断
  delay(500);           //每500ms产生一次中断
}

void function()
{
  digitalWrite(LED_BUILTIN,i%2);    //闪烁LED。
}
